_superlu_lib_c_args = ['-DUSE_VENDOR_BLAS=1']
if is_windows
  _superlu_lib_c_args += ['-DNO_TIMER=1']
endif
_superlu_lib_c_args += [
  Wno_unused_variable,
  Wno_parentheses,
  Wno_unused_label,
  Wno_implicit_function_declaration,
  Wno_switch,
  Wno_unused_result,
  Wno_maybe_uninitialized,
]
superlu_lib = static_library('superlu_lib',
  [
    'SuperLU/SRC/ccolumn_bmod.c',
    'SuperLU/SRC/ccolumn_dfs.c',
    'SuperLU/SRC/ccopy_to_ucol.c',
    'SuperLU/SRC/cdiagonal.c',
    'SuperLU/SRC/cgscon.c',
    'SuperLU/SRC/cgsequ.c',
    'SuperLU/SRC/cgsisx.c',
    'SuperLU/SRC/cgsitrf.c',
    'SuperLU/SRC/cgsrfs.c',
    'SuperLU/SRC/cgssv.c',
    'SuperLU/SRC/cgssvx.c',
    'SuperLU/SRC/cgstrf.c',
    'SuperLU/SRC/cgstrs.c',
    'SuperLU/SRC/clacon2.c',
    'SuperLU/SRC/clangs.c',
    'SuperLU/SRC/claqgs.c',
    'SuperLU/SRC/cldperm.c',
    'SuperLU/SRC/cmemory.c',
    'SuperLU/SRC/cmyblas2.c',
    'SuperLU/SRC/colamd.c',
    'SuperLU/SRC/cpanel_bmod.c',
    'SuperLU/SRC/cpanel_dfs.c',
    'SuperLU/SRC/cpivotL.c',
    'SuperLU/SRC/cpivotgrowth.c',
    'SuperLU/SRC/cpruneL.c',
    'SuperLU/SRC/creadMM.c',
    'SuperLU/SRC/creadhb.c',
    'SuperLU/SRC/creadrb.c',
    'SuperLU/SRC/creadtriple.c',
    'SuperLU/SRC/csnode_bmod.c',
    'SuperLU/SRC/csnode_dfs.c',
    'SuperLU/SRC/csp_blas2.c',
    'SuperLU/SRC/csp_blas3.c',
    'SuperLU/SRC/cutil.c',
    'SuperLU/SRC/dGetDiagU.c',
    'SuperLU/SRC/dcolumn_bmod.c',
    'SuperLU/SRC/dcolumn_dfs.c',
    'SuperLU/SRC/dcomplex.c',
    'SuperLU/SRC/dcopy_to_ucol.c',
    'SuperLU/SRC/ddiagonal.c',
    'SuperLU/SRC/dgscon.c',
    'SuperLU/SRC/dgsequ.c',
    'SuperLU/SRC/dgsisx.c',
    'SuperLU/SRC/dgsitrf.c',
    'SuperLU/SRC/dgsrfs.c',
    'SuperLU/SRC/dgssv.c',
    'SuperLU/SRC/dgssvx.c',
    'SuperLU/SRC/dgstrf.c',
    'SuperLU/SRC/dgstrs.c',
    'SuperLU/SRC/dlacon2.c',
    'SuperLU/SRC/dlangs.c',
    'SuperLU/SRC/dlaqgs.c',
    'SuperLU/SRC/dldperm.c',
    'SuperLU/SRC/dmach.c',
    'SuperLU/SRC/dmemory.c',
    'SuperLU/SRC/dmyblas2.c',
    'SuperLU/SRC/dpanel_bmod.c',
    'SuperLU/SRC/dpanel_dfs.c',
    'SuperLU/SRC/dpivotL.c',
    'SuperLU/SRC/dpivotgrowth.c',
    'SuperLU/SRC/dpruneL.c',
    'SuperLU/SRC/dreadMM.c',
    'SuperLU/SRC/dreadhb.c',
    'SuperLU/SRC/dreadrb.c',
    'SuperLU/SRC/dreadtriple.c',
    'SuperLU/SRC/dsnode_bmod.c',
    'SuperLU/SRC/dsnode_dfs.c',
    'SuperLU/SRC/dsp_blas2.c',
    'SuperLU/SRC/dsp_blas3.c',
    'SuperLU/SRC/dutil.c',
    'SuperLU/SRC/dzsum1.c',
    'SuperLU/SRC/get_perm_c.c',
    'SuperLU/SRC/heap_relax_snode.c',
    'SuperLU/SRC/icmax1.c',
    'SuperLU/SRC/ilu_ccolumn_dfs.c',
    'SuperLU/SRC/ilu_ccopy_to_ucol.c',
    'SuperLU/SRC/ilu_cdrop_row.c',
    'SuperLU/SRC/ilu_cpanel_dfs.c',
    'SuperLU/SRC/ilu_cpivotL.c',
    'SuperLU/SRC/ilu_csnode_dfs.c',
    'SuperLU/SRC/ilu_dcolumn_dfs.c',
    'SuperLU/SRC/ilu_dcopy_to_ucol.c',
    'SuperLU/SRC/ilu_ddrop_row.c',
    'SuperLU/SRC/ilu_dpanel_dfs.c',
    'SuperLU/SRC/ilu_dpivotL.c',
    'SuperLU/SRC/ilu_dsnode_dfs.c',
    'SuperLU/SRC/ilu_heap_relax_snode.c',
    'SuperLU/SRC/ilu_relax_snode.c',
    'SuperLU/SRC/ilu_scolumn_dfs.c',
    'SuperLU/SRC/ilu_scopy_to_ucol.c',
    'SuperLU/SRC/ilu_sdrop_row.c',
    'SuperLU/SRC/ilu_spanel_dfs.c',
    'SuperLU/SRC/ilu_spivotL.c',
    'SuperLU/SRC/ilu_ssnode_dfs.c',
    'SuperLU/SRC/ilu_zcolumn_dfs.c',
    'SuperLU/SRC/ilu_zcopy_to_ucol.c',
    'SuperLU/SRC/ilu_zdrop_row.c',
    'SuperLU/SRC/ilu_zpanel_dfs.c',
    'SuperLU/SRC/ilu_zpivotL.c',
    'SuperLU/SRC/ilu_zsnode_dfs.c',
    'SuperLU/SRC/input_error.c',
    'SuperLU/SRC/izmax1.c',
    'SuperLU/SRC/mark_relax.c',
    'SuperLU/SRC/memory.c',
    'SuperLU/SRC/mmd.c',
    'SuperLU/SRC/qselect.c',
    'SuperLU/SRC/relax_snode.c',
    'SuperLU/SRC/scolumn_bmod.c',
    'SuperLU/SRC/scolumn_dfs.c',
    'SuperLU/SRC/scomplex.c',
    'SuperLU/SRC/scopy_to_ucol.c',
    'SuperLU/SRC/scsum1.c',
    'SuperLU/SRC/sdiagonal.c',
    'SuperLU/SRC/sgscon.c',
    'SuperLU/SRC/sgsequ.c',
    'SuperLU/SRC/sgsisx.c',
    'SuperLU/SRC/sgsitrf.c',
    'SuperLU/SRC/sgsrfs.c',
    'SuperLU/SRC/sgssv.c',
    'SuperLU/SRC/sgssvx.c',
    'SuperLU/SRC/sgstrf.c',
    'SuperLU/SRC/sgstrs.c',
    'SuperLU/SRC/slacon2.c',
    'SuperLU/SRC/slangs.c',
    'SuperLU/SRC/slaqgs.c',
    'SuperLU/SRC/sldperm.c',
    'SuperLU/SRC/smach.c',
    'SuperLU/SRC/smemory.c',
    'SuperLU/SRC/smyblas2.c',
    'SuperLU/SRC/sp_coletree.c',
    'SuperLU/SRC/sp_ienv.c',
    'SuperLU/SRC/sp_preorder.c',
    'SuperLU/SRC/spanel_bmod.c',
    'SuperLU/SRC/spanel_dfs.c',
    'SuperLU/SRC/spivotL.c',
    'SuperLU/SRC/spivotgrowth.c',
    'SuperLU/SRC/spruneL.c',
    'SuperLU/SRC/sreadMM.c',
    'SuperLU/SRC/sreadhb.c',
    'SuperLU/SRC/sreadrb.c',
    'SuperLU/SRC/sreadtriple.c',
    'SuperLU/SRC/ssnode_bmod.c',
    'SuperLU/SRC/ssnode_dfs.c',
    'SuperLU/SRC/ssp_blas2.c',
    'SuperLU/SRC/ssp_blas3.c',
    'SuperLU/SRC/superlu_timer.c',
    'SuperLU/SRC/sutil.c',
    'SuperLU/SRC/util.c',
    'SuperLU/SRC/zcolumn_bmod.c',
    'SuperLU/SRC/zcolumn_dfs.c',
    'SuperLU/SRC/zcopy_to_ucol.c',
    'SuperLU/SRC/zdiagonal.c',
    'SuperLU/SRC/zgscon.c',
    'SuperLU/SRC/zgsequ.c',
    'SuperLU/SRC/zgsisx.c',
    'SuperLU/SRC/zgsitrf.c',
    'SuperLU/SRC/zgsrfs.c',
    'SuperLU/SRC/zgssv.c',
    'SuperLU/SRC/zgssvx.c',
    'SuperLU/SRC/zgstrf.c',
    'SuperLU/SRC/zgstrs.c',
    'SuperLU/SRC/zlacon2.c',
    'SuperLU/SRC/zlangs.c',
    'SuperLU/SRC/zlaqgs.c',
    'SuperLU/SRC/zldperm.c',
    'SuperLU/SRC/zmemory.c',
    'SuperLU/SRC/zmyblas2.c',
    'SuperLU/SRC/zpanel_bmod.c',
    'SuperLU/SRC/zpanel_dfs.c',
    'SuperLU/SRC/zpivotL.c',
    'SuperLU/SRC/zpivotgrowth.c',
    'SuperLU/SRC/zpruneL.c',
    'SuperLU/SRC/zreadMM.c',
    'SuperLU/SRC/zreadhb.c',
    'SuperLU/SRC/zreadrb.c',
    'SuperLU/SRC/zreadtriple.c',
    'SuperLU/SRC/zsnode_bmod.c',
    'SuperLU/SRC/zsnode_dfs.c',
    'SuperLU/SRC/zsp_blas2.c',
    'SuperLU/SRC/zsp_blas3.c',
    'SuperLU/SRC/zutil.c'
  ],
  c_args: _superlu_lib_c_args,
  include_directories: ['SuperLU/SRC'],
  gnu_symbol_visibility: 'hidden',
)

py3.extension_module('_superlu',
  ['_superlumodule.c', '_superlu_utils.c', '_superluobject.c'],
  link_with: [superlu_lib],
  include_directories: ['SuperLU/SRC'],
  link_args: version_link_args,
  dependencies: [lapack_dep, blas_dep, np_dep],
  install: true,
  subdir: 'scipy/sparse/linalg/_dsolve'
)

py3.install_sources([
    '__init__.py',
    '_add_newdocs.py',
    'linsolve.py'
  ],
  subdir: 'scipy/sparse/linalg/_dsolve'
)

subdir('tests')
